Servlet Filters হল একটি powerful কম্পোনেন্ট যা HTTP রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়াকরণের প্রক্রিয়ার মধ্যে অবস্থান করে। ফিল্টারগুলি সাধারণত ওয়েব অ্যাপ্লিকেশনগুলিতে লগিং, অথেনটিকেশন, ডেটা কমপ্রেশন, ইনপুট/আউটপুট ডেটা ভ্যালিডেশন, এবং অন্যান্য ক্রস-কাটিং কনসার্ন (cross-cutting concerns) পরিচালনার জন্য ব্যবহৃত হয়। ফিল্টারগুলি সার্ভলেটস বা JSP পেজগুলির আগে বা পরে কার্যকর হতে পারে, এবং তারা সার্ভলেট বা JSP প্রক্রিয়ার জন্য রিকোয়েস্ট এবং রেসপন্সের উপর প্রভাব ফেলতে পারে।
ফিল্টারের মাধ্যমে Authentication, Logging, এবং Data Compression এর মতো কাজ করা সম্ভব। আসুন, আমরা বিস্তারিতভাবে দেখব কিভাবে এই ফিল্টারগুলি ব্যবহৃত হয়।
1. Authentication Filters
Authentication Filters ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশনের সুরক্ষা নিশ্চিত করতে পারেন। ফিল্টারটি রিকোয়েস্টের আগে বা পরে ইউজারের অথেনটিকেশন চেক করে এবং প্রয়োজনীয় হলে লগইন পেজে রিডিরেক্ট করতে পারে। এটি সাধারণত ইউজারের অথেনটিকেশন টোকেন বা সেশন পরীক্ষা করতে ব্যবহৃত হয়।
উদাহরণ: Authentication Filter
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter("/secured/*")
public class AuthenticationFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// Initialization (if needed)
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
// Check if user is authenticated
Object user = httpRequest.getSession().getAttribute("user");
if (user == null) {
// If not authenticated, redirect to login page
httpResponse.sendRedirect("/login");
} else {
// Proceed with the request if authenticated
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
// Cleanup (if needed)
}
}
এখানে:
@WebFilter("/secured/*")এই ফিল্টারটি শুধুমাত্র/secured/*URL পাথের জন্য কার্যকর হবে।doFilter()মেথডে ইউজারের সেশন চেক করা হচ্ছে। যদি ইউজার লগইন না থাকে, তাকে লগইন পেজে রিডিরেক্ট করা হবে।
2. Logging Filters
Logging Filters ব্যবহৃত হয় রিকোয়েস্ট এবং রেসপন্সের লগ নেওয়ার জন্য। এটি সাহায্য করে অ্যাপ্লিকেশনের কার্যক্রম ট্র্যাক করতে এবং সিস্টেম মনিটরিং করতে। ফিল্টারটি রিকোয়েস্ট এবং রেসপন্সের প্রতিটি ডিটেইল লগ করে রাখতে পারে, যেমন রিকোয়েস্ট মেথড, ইউজার এজেন্ট, কন্টেন্ট টাইপ ইত্যাদি।
উদাহরণ: Logging Filter
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@WebFilter("/*")
public class LoggingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// Initialization (if needed)
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
// Log the HTTP method and request URL
System.out.println("Request Method: " + httpRequest.getMethod());
System.out.println("Request URL: " + httpRequest.getRequestURI());
// Proceed with the request
chain.doFilter(request, response);
}
@Override
public void destroy() {
// Cleanup (if needed)
}
}
এখানে:
@WebFilter("/*")এই ফিল্টারটি অ্যাপ্লিকেশনের সকল রিকোয়েস্টের জন্য কার্যকর।doFilter()মেথডে রিকোয়েস্টের মেথড এবং ইউআরএল লগ করা হচ্ছে। প্রতিটি রিকোয়েস্টের ডিটেইল ট্র্যাক করা হয়।
3. Data Compression Filters
Data Compression Filters ওয়েব অ্যাপ্লিকেশনের রেসপন্সে ডেটা কমপ্রেশন প্রক্রিয়া চালাতে সাহায্য করে। এটি সাধারণত gzip বা deflate কমপ্রেশন প্রযুক্তি ব্যবহার করে রেসপন্সের সাইজ কমাতে এবং নেটওয়ার্ক ট্রাফিকের পরিমাণ কমাতে সাহায্য করে। এই ফিল্টারটি রিকোয়েস্টের প্রতি কমপ্রেসড রেসপন্স পাঠানোর মাধ্যমে কর্মক্ষমতা উন্নত করে।
উদাহরণ: Data Compression Filter
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;
@WebFilter("/*")
public class CompressionFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// Initialization (if needed)
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
// Check if client accepts GZIP encoding
String acceptEncoding = ((HttpServletRequest) request).getHeader("Accept-Encoding");
if (acceptEncoding != null && acceptEncoding.contains("gzip")) {
// Wrap the response output stream with GZIPOutputStream
GZIPResponseWrapper gzipResponse = new GZIPResponseWrapper(httpResponse);
chain.doFilter(request, gzipResponse);
gzipResponse.finishResponse();
} else {
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
// Cleanup (if needed)
}
}
এখানে:
Accept-Encodingহেডার চেক করা হয়েছে, যদি ক্লায়েন্ট gzip সমর্থন করে তবে রেসপন্সকে GZIP কমপ্রেসড করা হবে।GZIPResponseWrapperএকটি কাস্টম রেসপন্স র্যাপার ক্লাস যা GZIP কমপ্রেসড রেসপন্স আউটপুট স্ট্রীম সরবরাহ করে।
Filters এর অন্যান্য ব্যবহারের উদাহরণ
- Security Filters: ব্যবহারকারীর অথেনটিকেশন এবং অথোরাইজেশন চেক করতে ফিল্টার ব্যবহার করা যায়। যেমন, সেশন চেক, রোল-ভিত্তিক অ্যাক্সেস কন্ট্রোল, এবং CSRF প্রতিরোধ।
- Request Validation Filters: ইউজারের ইনপুট ভ্যালিডেশন করা এবং সঠিক ফর্ম্যাটে ডেটা সরবরাহ করা।
- Caching Filters: সার্ভার থেকে ক্লায়েন্টে রেসপন্স ক্যাশ করার জন্য ফিল্টার ব্যবহৃত হতে পারে।
সার্ভলেট ফিল্টার কনফিগারেশন
web.xml ফাইলে সার্ভলেট ফিল্টার কনফিগার করা হয়। এখানে ফিল্টারের ম্যাপিং করা হয় যাতে সেটি নির্দিষ্ট রিকোয়েস্ট বা URL পাথের জন্য কার্যকর হয়।
<filter>
<filter-name>LoggingFilter</filter-name>
<filter-class>com.example.LoggingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoggingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
এখানে:
<filter>ট্যাগে ফিল্টারের নাম এবং ক্লাস নির্ধারণ করা হয়।<filter-mapping>ট্যাগে ফিল্টারটি কোন URL পাথে কার্যকর হবে তা নির্ধারণ করা হয়।
সারাংশ
Servlet Filters ওয়েব অ্যাপ্লিকেশনের বিভিন্ন ক্রস-কাটিং কনসার্ন (authentication, logging, data compression) পরিচালনা করার জন্য ব্যবহৃত হয়। Authentication Filters ব্যবহারকারীর অথেনটিকেশন চেক করে, Logging Filters রিকোয়েস্ট এবং রেসপন্সের লগ নেয়, এবং Data Compression Filters রেসপন্স কমপ্রেসন করে। Filters ওয়েব অ্যাপ্লিকেশনগুলোকে আরও দক্ষ, নিরাপদ এবং মনিটর করা সহজ করে তোলে।
Read more